
// 布尔类型  声明一个布尔类型的变量
let b:boolean; 
let b2: boolean = true;
b = true;
b = false;
// b = 123;
// b = '1231';

//字符串类型  声明一个字符串类型的变量
let s: string;
s = '123';
let s2: string = 'i miss you';
// s = 123;
// s = [];
// s = true;

//数字类型
let n: number;
n = 10;
n = 0b10;// 二进制
n = 0o345;//八进制
n = 0x1fab;// 十六进制
// n = true;
// n = 'abc';
// n = {};

//字面量类型  声明一个类型为 20 的变量
// let z: 20;
// z = 20;
// z = 30;
let z: 'left' | 'right' | 'center';
z = 'right';
// z = 'xxx';

//any 类型  任意.  
let a: any;
a = 111;
// a = 'sss';
// a = true;
// a = {};
// a = [];
// a.map();

//void 类型
// let u: void;
// u = undefined;
// u = 123;
// u = 'afse';
// u = null;
//设置当前函数返回值的类型为空
// function fn(): void{
// }

//object 类型 (设置变量的类型为引用类型)
let o: object = {};
o = [];
o = () => {};

//下面的赋值都无效会报错
// o = 100;
// o = '12312';
// o = true;

//数组类型. 要求每个数组元素的类型都是一致的
// let stu: string[];
// stu = ['a','b','c', 1];

//第二种设置方式   『泛型类型』
// let stu2: Array<string>;
// stu2 = ['a','b','c'];

//元组类型
// let info: [string, number] = ['张三', 10];
// let infos: [string, number][] = [
//   ['张三', 20],
//   ['李四', 15]
// ];

//枚举类型
//枚举类型中元素的值默认是从 0 开始依次赋值的
//枚举类型的值只能基本数据类型的值
enum Gender{
  Female="女",
  Male="男",
  Secret="保密"
}

let obj = {
  gender: Gender.Male
}

enum Week{
  Mon=1,
  Tues=2,
  Wed=3,
  Thu=4,
  Fri=5,
  Sat=6,
  Sun=7
}

console.log(obj);

//联合类型
let value: 'left' | 'center' | 'right';
value = 'center';
let theme: 'primary' | 'danger' | 'info' | 'default' | 'warning';

//类型断言
// let div = document.querySelector('div') as HTMLDivElement;
let div = document.querySelector('div');
//告诉 TS div 变量的类型为 HTMLDivElement
(<HTMLDivElement>div).style.background = '#ccc';

//类型推断
let n2 = 100;//会推断出 n2 变量的类型为 number
let n3;// 会推断出 n3 变量的类型为 any
n3 = 100;
n3 = 'abc';


